package com.tp2.bo.impl;

import com.tp2.bo.Oferta;
import com.tp2.dominio.Descuento;
import com.tp2.dominio.MedioDePago;
import com.tp2.dominio.Producto;
import com.tp2.dominio.TarjetaDescuento;

import java.util.ArrayList;
import java.util.List;

public class OfertaTotal extends Oferta {

    private Integer porcentaje;

    public OfertaTotal() {
        super();
        this.setPrioridad(3);
    }

    @Override
    public List<Descuento> aplicar(List<Producto> productos, MedioDePago medioDePagoCompra, TarjetaDescuento tarjetaDescuento) {

        List<Descuento> descuentosAplicados = new ArrayList<Descuento>();

        if (esMedioDePagoValido(medioDePagoCompra) && esTarjetaDeDescuentoValida(tarjetaDescuento)) {

            double totalDescuento = 0;
            
            for (Producto producto : productos) {
            	
            	double descuento = (producto.getPrecioConDescuento() * getPorcentaje()) / 100;
            	producto.setPrecioConDescuento(producto.getPrecioConDescuento() - descuento);
            	totalDescuento += descuento;
            }
                     
            descuentosAplicados.add(new Descuento(getDescripcion(), totalDescuento));
        }

        return descuentosAplicados;
    }

    public MedioDePago getMedioDePago() {
        return medioDePago;
    }

    public void setMedioDePago(MedioDePago medioDePago) {
        this.medioDePago = medioDePago;
    }

    public Integer getPorcentaje() {
        return porcentaje;
    }

    public void setPorcentaje(Integer porcentaje) {
        this.porcentaje = porcentaje;
    }

    public String getDescripcion() {

        if (descripcion == null) {

            String descripcionDescuento = "Descuento para cualquier medio de pago ";

            if (getMedioDePago() != null) {
                descripcionDescuento = "Descuento con medio de pago " + getMedioDePago().getNombre();
            }

            return descripcionDescuento;
        }

        return descripcion;

    }
}
